//
//  main.m
//  02-ClassAndObject
//
//  Created by dllo on 16/7/5.
//  Copyright © 2016年 dllo. All rights reserved.
//

#import <Foundation/Foundation.h>
#import "Person.h"
#import "Fraction.h"
int main(int argc, const char * argv[]) {
     //1.快捷键
    // command + 0 开／收起左边栏
    // command + option + 0 开／右边栏
    //command + shift + y 开／收下变栏
    // command + R 运行
    // command + B 编译
    // command + Z 撤销
    // command + shift + Z 反撤销／重做
    // command + C 复制
    // command ＋ V 粘贴
    
    // 创建类
    // command ＋ N 新建文件
    // command + shift + N  新建工程
    
    
    // 2.移动光标
    // command + ⬅️ 移动到当前行的最左面
    // command + ➡️ 移动到当前行的最右面
    // command + ⬆️ 移动到所有行的第一行起始位置
    // command + ⬇️ 移动到所有行的最后一行起始位置
    
    // 3.选中文字
    // shift ＋ ⬅️ 选中向左一个字
    // shift ＋ ➡️ 选中向右一个字
    // shift ＋ ⬆️ 从当前光标位置开始，选中向上一行，对应位置
    // shift ＋ ⬇️ 从当前光标位置开始，选中向下一行，对应位置
    
    // command ＋ shift ＋ ⬅️ 选中从光标开始，左边所有的文字
    // command + shift + ➡️ 选中从光标开始，右边所有的文字
    // command + shift + ⬆️ 选中从光标开始，上边所有的文字
    // command + shift + ⬇️ 选中从光标开始，下边所有的文字
    
    
    //1.类和对象
    //类： 一个具有相同特征和行为的事物抽象集合
    //对象：类的实例，也称作类的实现。
    //面向对象的思想，万物都是对象。
    //面向对象语言是面向对象思想的具体实现
    //OOP 面向对象编程
    //OOD 面向对象设计
   //面向对象三大特征（特性）封装 继承 多态 提高代码的复用
    
    // 2.Objective－C（OC）
    // 与C语言的区别
    // OC属于C语言的扩展
    // OC有类的概念
    // OC中声明属性和方法在.h中
    // OC中实现方法在.m中
    // .mm 是C++文件，在这个文件中可以编写C++代码
    
    // OC中的根类 NSObject
  
    // 3. 创建OC的实例
    // 1> 消息语法 ［objc doSometing］
   //向objc对象去发送一个doSomething的方法，让他们去调用
   //    类的方法的调用（由类名去调用其＋方法）
   //    ＋alloc 开辟内存空间
    NSObject *objec = [NSObject alloc];
   //    实例方法的调用
   // —init
   NSObject *newobjc = [objec init];
    
    //创建一个Person对象
    Person *per = [[Person alloc]init];
//    公开的成员可以直接通过 —>赋值 －>取值
    
    per->_age = 10;
    NSLog(@"%ld",per->_age);
    
    // 受保护的成员不能通过－>去访问
    
    // id 与 instancetype
//    instancetype 在作为参数返回值时候与id是一样的，系统编译器会把id类型转换成instancetype（即当前对象类型）
// id可以作为变量类型去用，但instancetype不行
    id object = [[NSObject alloc]init];
    
    Fraction *fra1 = [Fraction fractionWithNumerator:10 denominator:2];
    Fraction *fra2 = [Fraction fractionWithNumerator:3 denominator:2];
    [[fra1 addFraction:fra2] shuchu];
    [[fra1 subFraction:fra2] shuchu];
    [[fra1 mulFraction: fra2] shuchu];
    [[fra1 divFraction: fra2] shuchu];
    [fra1 compare:fra2];
    
    
    
    
    
    
    return 0;
}
